/*
基础练习 01字串  
时间限制：1.0s   内存限制：256.0MB
    
	问题描述
	对于长度为5位的一个01串，每一位都可能是0或1，一共有32种可能。它们的前几个是：
	00000 
	00001
	00010
	00011
	00100
	请按从小到大的顺序输出这32种01串。
	输入格式
	本试题没有输入。
	输出格式
	输出32行，按从小到大的顺序每行一个长度为5的01串。
	样例输出
	00000 
	00001
	00010
	00011
	以下部分省略

*/

/*
解题思路：1、感觉这题可以用位运算;
		2、取其次，二进制，逢二进一
*/
#include <cstdio>

int vis[5];

void dfs(int n) {
	if(n >= 32)
		return ;

	for(int i=4; i>=0; i--)
		printf("%d", vis[i]);
	printf("\n");
	
	// 关键代码 begin
	// 进位(二进制)
	int c = 1;
	for(int i=0; i<5; i++) {
		vis[i] += c;
		if(vis[i] >=2) {
			c = 1;
			vis[i] = 0;
		}
		else
			c = 0;
	} // end

	dfs(n+1);
	
	return ;
}

int main(void) {
	
	dfs(0);
	
	return 0;
}
